package com.dragon.modules.yuegou.service.wallet;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dragon.common.web.PageRequest;
import com.dragon.modules.yuegou.entity.wallet.MemberCardEntity;
import com.dragon.modules.yuegou.model.order.Order;
import com.dragon.modules.yuegou.model.pay.PaymentInformation;
import com.dragon.modules.yuegou.model.pay.ScanCardModel;
import com.dragon.modules.yuegou.model.pay.YueCardPayModel;
import com.dragon.modules.yuegou.model.system.Document;
import com.dragon.modules.yuegou.model.wallet.EarlyMemberCard;
import com.dragon.modules.yuegou.model.wallet.MemberCard;
import com.dragon.modules.yuegou.query.wallet.CardGetQuery;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
 * 会员悦卡（简称悦卡） 服务接口
 *
 * @author pbuilder generated
 * @date 2019-03-05 11:27:23
 * @version 2.0
 */
public interface MemberCardService extends IService<MemberCardEntity> {
	
	/**
	 * 根据ID批量查询
	 * @param ids ID列表
	 * @return ID-会员悦卡映射表
	 */
	Map<String, MemberCard> getByIds(Collection<String> ids);

	/**
	 * 查询会员在商铺可使用悦卡列表
	 * 
	 * @param memberId
	 * @param merchantId
	 * @return
	 */
	List<MemberCard> getCardList(String memberId, String merchantId,Integer scenarioType);

	/**
	 * 查询会员在商铺可使用悦卡列表
	 *
	 * @param memberCardId
	 * @return
	 */
	MemberCard getMemberCard(String memberCardId);

	/**
	 * 创建预付卡
	 * 
	 * @param memberId       会员ID
	 * @param order        订单号
	 * @param cardTemplateId 悦卡模板ID
	 * @return 预付卡
	 */
	MemberCard createBoughtCard(String memberId, Order order, String cardTemplateId);

	/**
	 * 批量创建预付卡
	 * 
	 * @param memberId        会员ID
	 * @param order         订单号
	 * @param cardTemplateIds 悦卡模板ID（可重复）
	 * @return 预付卡列表
	 */
	List<MemberCard> batchCreateBoughtCard(String memberId, Order order, List<String> cardTemplateIds);


	/**
	 * 扫码支付 修改会员悦卡金额
	 * @param yueCardPayModel
	 * @param merchantId
	 * @param orderNo
	 */
	MemberCard updateMemberCardRemain(YueCardPayModel yueCardPayModel, String merchantId, String orderNo, Boolean isDiscountRate);

	/**
	 * 扫码支付 修改会员悦卡金额
	 * @param yueCardPayModel
	 * @param merchantId
	 * @param orderNo
	 */
	void updateEntityCardRemain(YueCardPayModel yueCardPayModel,String merchantId,String orderNo);

	/**
	 * 悦卡购买商品，修改悦卡金额
	 * @param yueCardPayModel
	 * @param merchantId
	 * @param orderNo
	 */
	MemberCard updateMemberCardRemain(YueCardPayModel yueCardPayModel, String merchantId,String orderNo);
	/**
	 * 我的悦卡列表
	 *
	 * @param memberId        会员ID
	 * @param pageInfo
	 * @return 我的悦卡列表
	 */
	List<MemberCard> myMemberCardList(String memberId, PageRequest pageInfo);

	/**
	 * 我的悦卡列表
	 *
	 * @param memberId        会员ID
	 * @return 我的悦卡列表
	 */
	List<MemberCard> myMemberCardList(String memberId);


	/**
	 * 可赠送悦卡列表
	 *
	 * @param memberId        会员ID
	 * @param pageInfo
	 * @return 我的悦卡列表
	 */
	List<MemberCard> sendList(String memberId,PageRequest pageInfo);

	/**
	 * 我的历史列表
	 *
	 * @param memberId        会员ID
	 * @param pageInfo
	 * @return 我的悦卡列表
	 */
	List<MemberCard> history(String memberId,PageRequest pageInfo);

	/**
	 * 查询我的悦卡详情
	 * @param id
	 * @return
	 */
	MemberCard getDetail(String id);

	/**
	 * 根据已有我的悦卡 ，copy一张新悦卡
	 * @param memberCard
	 * @return
	 */
	MemberCard copyNewMemberCard(MemberCard memberCard);

	/**
	 * 将悦卡改为未赠送
	 * @param id
	 * @return
	 */
	void updateMemberCard(String id);

	/**
	 * 计算金额
	 * @param cardIdList
	 * @param memberId
	 * @param merchantId
	 * @param price
	 */
	ScanCardModel calculateFee(List<String> cardIdList, String memberId, String merchantId, BigDecimal price,Boolean isDiscountRate);

	/**
	 * 计算金额
	 * @param cardIdList
	 * @param memberId
	 * @param price
	 */
	ScanCardModel calculateCardFee(List<String> cardIdList, String memberId, BigDecimal price);

	/**
	 * 退款
	 * @param cardId
	 */
    void refundCard(String cardId);

	/**
	 * 查询会员获取悦卡
	 * */
	IPage<MemberCard> searchGetRecord(PageRequest page, CardGetQuery query);

	/**
	 * 导出获取悦卡记录
	 * */
	Document exportGetRecord(CardGetQuery query);
	
	/**
	 * 查询会员红豆
	 */
	List<MemberCard> getMemberRedBean(String memberId,PageRequest pageInfo,String busdId);

	/**
	 * 绑定悦卡
	 * @param cardNo
	 * @param cardPwd
	 * @param id
	 */
    void bindYueCard(String cardNo, String cardPwd, String id);

	/**
	 * 解绑悦卡
	 * @param memberCardId
	 * @param id
	 */
    void unbundlingYueCard(String memberCardId, String id);

	/***
	 * 查询悦卡类型
	 * @param memberCardId
	 */
	Integer searchCardType(String memberCardId);

	/**
	 * 获取可以在京东积分商城上支付的悦卡
	 * @param memberId
	 * @return
	 */
    List<MemberCard> getJdCardList(String memberId);

	/**
	 * 预使用悦卡余额
	 * @param yueCardPayModel
	 * @param orderNo
	 * @return
	 */
    EarlyMemberCard earlyMemberCardRemain(YueCardPayModel yueCardPayModel, String orderNo);

	/**
	 * 预使用悦卡余额
	 * @param yueCardPayModel
	 * @param orderNo
	 * @param allowBuyJd 是否是购买大汉新生活订单
	 * @return
	 */
	EarlyMemberCard earlyMemberCardRemain(YueCardPayModel yueCardPayModel, String orderNo,Boolean allowBuyJd);


	/**
	 * 悦卡回退 包含 退款订单
	 * @param orderNo
	 */
	void refundOrderBackCard(String busdId,String orderNo);

	/**
	 * 悦卡回退 包含 取消订单
	 * @param orderNo
	 */
	void cancelOrderBackCard(String orderNo);

	/**
	 * 悦卡余额
	 * @param memberId
	 * @return
	 */
	BigDecimal yueCardCoin(String memberId);

	/**
	 * 扫码返回悦卡付款信息
	 * @param cardIdList 选择的悦卡id列表
	 * @param memberId 会员id
	 * @param merchantId 商户id
	 * @param price 价格
	 * @param isDiscountRate 是否折扣
	 * @return
	 */
	PaymentInformation yueCardPaymentInformation(List<String> cardIdList,String memberId, String merchantId, BigDecimal price, boolean isDiscountRate);
}